<!-- build time:Sun Nov 24 2019 22:25:19 GMT+0800 (China Standard Time) --><!DOCTYPE html><html lang="zh"><head><meta charset="utf-8"><title>迁移 VMware 虚拟机到 KVM - Note?Note!</title><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"><meta name="description" content="前言随着虚拟化技术的不断发展，虚拟机的应用也越来越广泛。日常应用中可能出现资源不足，系统管理调整或者系统备份等原因，希望将某一虚拟机从原来物理主机迁移到另一个物理主机上，即 V2V（Virtual-to-Virtual）迁移。虚拟机的迁移需要物理主机上 VMM（Virtual Machine Monitor）的支持。相同类型 VMM 之间，使用相同的 API 接口，通常具有强大的迁移能力。例如本系"><meta name="keywords" content="Oprations,Vmware,KVM"><meta property="og:type" content="article"><meta property="og:title" content="迁移 VMware 虚拟机到 KVM"><meta property="og:url" content="http:&#x2F;&#x2F;www.borgor.cn&#x2F;2017-10-23&#x2F;16f315c1.html"><meta property="og:site_name" content="Note?Note!"><meta property="og:description" content="前言随着虚拟化技术的不断发展，虚拟机的应用也越来越广泛。日常应用中可能出现资源不足，系统管理调整或者系统备份等原因，希望将某一虚拟机从原来物理主机迁移到另一个物理主机上，即 V2V（Virtual-to-Virtual）迁移。虚拟机的迁移需要物理主机上 VMM（Virtual Machine Monitor）的支持。相同类型 VMM 之间，使用相同的 API 接口，通常具有强大的迁移能力。例如本系"><meta property="og:locale" content="zh-CN"><meta property="og:image" content="https:&#x2F;&#x2F;imgs.borgor.cn&#x2F;imgs20190625084802.png"><meta property="og:updated_time" content="2019-10-08T06:16:25.000Z"><meta name="twitter:card" content="summary"><meta name="twitter:image" content="https:&#x2F;&#x2F;imgs.borgor.cn&#x2F;imgs20190625084802.png"><link rel="icon" href="/favicon.ico"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.css"><link rel="stylesheet" href="https://cdnjs.loli.net/ajax/libs/font-awesome/5.4.1/css/all.min.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu:400,600|Source+Code+Pro"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-light.min.css"><style>body>.footer,body>.navbar,body>.section{opacity:0}</style><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightgallery/1.6.8/css/lightgallery.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/justifiedGallery/3.7.0/css/justifiedGallery.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/outdated-browser/1.1.5/outdatedbrowser.min.css"><link rel="stylesheet" href="/css/back-to-top.css"><script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="//hm.baidu.com/hm.js?6cecff6d18ae0c22fd7ac294c80fe7c0";var c=document.getElementsByTagName("script")[0];c.parentNode.insertBefore(e,c)}()</script><link rel="stylesheet" href="/css/progressbar.css"><script src="https://cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script><script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><link rel="stylesheet" href="/css/style.css"></head><body class="is-2-column"><nav class="navbar navbar-main"><div class="container"><div class="navbar-brand is-flex-center"><a class="navbar-item navbar-logo" href="/"><img src="https://imgs.borgor.cn/imgs20190625111723.jpg" alt="迁移 VMware 虚拟机到 KVM" height="28"></a></div><div class="navbar-menu"><div class="navbar-start"><a class="navbar-item" href="/">首页</a> <a class="navbar-item" href="/archives">归档</a> <a class="navbar-item" href="/categories">分类</a> <a class="navbar-item" href="/tags">标签</a> <a class="navbar-item" href="/readinglist">书单</a></div><div class="navbar-end"><a class="navbar-item is-hidden-tablet catalogue" title="目录" href="javascript:;" target="_blank" rel="noopener"><i class="fas fa-list-ul"></i> </a><a class="navbar-item search" title="搜索" href="javascript:;" target="_blank" rel="noopener"><i class="fas fa-search"></i></a></div></div></div></nav><section class="section"><div class="container"><div class="columns"><div class="column is-8-tablet is-9-desktop is-9-widescreen has-order-2 column-main"><div class="card"><div class="card-image"><span class="image is-7by1"><img class="thumbnail" src="https://imgs.borgor.cn/imgs20190625084802.png" alt="迁移 VMware 虚拟机到 KVM"></span></div><div class="card-content article"><div class="level article-meta is-size-7 is-uppercase is-mobile is-overflow-x-auto"><div class="level-left"><time class="level-item has-text-grey" datetime="2017-10-23T08:29:03.000Z">2017-10-23</time><div class="level-item"><a class="has-link-grey -link" href="/categories/Operations/">Operations</a>&nbsp;/&nbsp;<a class="has-link-grey -link" href="/categories/Operations/System/">System</a></div><span class="level-item has-text-grey">1 小时 读完 (大约 9368 个字) </span><span class="level-item has-text-grey" id="busuanzi_container_page_pv"><i class="far fa-eye"></i> <span id="busuanzi_value_page_pv">0</span>次访问</span></div></div><h1 class="title is-size-3 is-size-4-mobile has-text-weight-normal">迁移 VMware 虚拟机到 KVM</h1><div class="content"><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>随着虚拟化技术的不断发展，虚拟机的应用也越来越广泛。日常应用中可能出现资源不足，系统管理调整或者系统备份等原因，希望将某一虚拟机从原来物理主机迁移到另一个物理主机上，即 V2V（Virtual-to-Virtual）迁移。虚拟机的迁移需要物理主机上 VMM（Virtual Machine Monitor）的支持。相同类型 VMM 之间，使用相同的 API 接口，通常具有强大的迁移能力。例如本系列第二篇文章介绍的 KVM 虚拟机之间的迁移，它支持三种迁移方式：离线迁移、在线共享存储迁移和在线块迁移。而不同的 VMM 之间，由于虚拟化实现技术的不同、开发厂商的不同、API 接口的不同，使虚拟机迁移困难重重。本文分别介绍如何静态迁移 VMware ESX/ESXi、VMware Workstation 及 VMware Player 上的虚拟机到 KVM 主机。</p><a id="more"></a><h2 id="VMware-虚拟机迁移到-KVM-的方式"><a href="#VMware-虚拟机迁移到-KVM-的方式" class="headerlink" title="VMware 虚拟机迁移到 KVM 的方式"></a>VMware 虚拟机迁移到 KVM 的方式</h2><p>虚拟机 V2V（Virtual-to-Virtual）迁移是在虚拟机之间移动操作系统和数据， 照顾主机级别的差异和处理不同的虚拟硬件。V2V 的迁移方法有两种，静态迁移和在线迁移。静态迁移（offline migration）也叫做常规迁移、离线迁移。在迁移之前将虚拟机暂停，同时拷贝虚拟机镜像和状态到目的主机。相比较于在线迁移（online migration），其缺点是静态迁移方式的过程需要显式的停止虚拟机的运行，而在线迁移的过程仅有非常短暂的停机时间，保证迁移过程中虚拟机服务的持续可用；优点是兼容性强，不需要 VMM 的有统一的 API 接口，可以借助第三方工具辅助迁移。由于目前 VMM 的开发没有统一的标准，不同的虚拟化厂商，尤其是闭源的商业厂商开发的 VMM 各成一套，静态迁移是解决不同类型虚拟机之间迁移的有效办法。本文采用 V2V 静态迁移的方法实现 VMware 虚拟机到 KVM 的迁移，同时介绍开源迁移工具 virt-v2v 的使用。</p><h2 id="VMware-虚拟化产品及虚拟机文件"><a href="#VMware-虚拟化产品及虚拟机文件" class="headerlink" title="VMware 虚拟化产品及虚拟机文件"></a>VMware 虚拟化产品及虚拟机文件</h2><h3 id="VMware-产品简介"><a href="#VMware-产品简介" class="headerlink" title="VMware 产品简介"></a>VMware 产品简介</h3><p>VMware 是全球虚拟化解决方案的领导厂商，提供了一套虚拟机解决方案，按产品特点可分为如下四类。</p><ul><li>VMware ESX/ESXi：这个产品不需要安装任何操作系统，它本身就是一个用来管理硬件资源的特殊的操作系统，所有的虚拟机都安装在它的上面。ESX Server 带有远程 web 管理和客户端管理功能。</li><li>VMware Server、Workstation 和 Fusion：与 ESX 相比，这三个产品都是要安装在操作系统上的。Server 和 Workstation 运行在 Windows 和 Linux 上，Fusion 运行在苹果的 Mac OS 上。</li><li>VMware VMotion：是 VMware 开发出的一项独特技术，它将服务器、存储和网络设备完全虚拟化，使得正在运行的整个虚拟机能够在瞬间从一台服务器移到另一台服务器上。</li><li>Virtual Center、Importer、Convertor、P2V、Player：这些是为了配合 VMware 虚拟引擎，主要是为了配合 ESX 开发的管理软件和工具，这些工具中很多是免费的。</li></ul><p>本文主要迁移创建在 VMware ESX/ESXi、VMware Workstation 和 VMware Player 上的虚拟机到 KVM 主机上，迁移后的虚拟机可以被开源的 libvirt 软件管理。</p><h3 id="VMware-虚拟机文件介绍"><a href="#VMware-虚拟机文件介绍" class="headerlink" title="VMware 虚拟机文件介绍"></a>VMware 虚拟机文件介绍</h3><p>成功迁移虚拟机的一个重要的验证标准就是文件的正确性和完整性。下图中列出与 VMware 虚拟机相关的文件，但是迁移 VMware 虚拟机到 KVM 并不需要用到所有的文件。</p><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-2-49.png" alt></p><p><strong>图 1. VMware 虚拟机文件</strong></p><p>VMware 虚拟机的文件主要包括 .nvram 文件，.vmx 文件，vmdk 文件，.vswp 文件，.vmss 文件，.vmsd 文件，.vmsn 文件，.log 文件，.vmxf 文件。与迁移相关的最主要的是 .vmx 文件和 .vmdk 文件。</p><ul><li>.vmx 文件：包括虚拟机所有配置信息与硬件设置。不管你对虚拟机的设置做了何种编辑，所有的信息都会以文本形式保存在这个文件里。如特殊硬件配置（例如 RAM 大小，网络接口信息，硬盘驱动信息，串行与并行信息），高级能源与资源配置、VMware 工具选项及能源管理选项。迁移虚拟机时，需要更改这个文件的格式到 KVM 支持的 xml 文件，并且重新确认文件信息的有效性。</li><li>.vmdk 文件：包含虚拟磁盘的信息。虚拟机的文件系统就建立在 .vmdk 文件上。迁移时需要拷贝这个文件到 KVM 主机，并且转换成能够被 libvirt 识别的文件格式。</li></ul><p>以下的虚拟机文件有些只在虚拟机处于的某种状态时出现，迁移过程中不会用到。例如当虚拟机开启时出现 .vswp 文件，当虚拟机暂停时出现 .vmss 文件。</p><ul><li>.nvram 文件：包括虚拟机启动过程一部分的 Phoenix BIOS。它类似于拥有 BIOS 芯片的物理服务器，能够设置硬件配置选项。如果删除的话，在虚拟机启动时会自动地重新创建。</li><li>.vswp file：这些文件的大小等于分配给虚拟机的内存大小，再减去任何内存预留（默认是 0）。这些文件通常创建在虚拟机里，但是只有当 ESX 主机耗尽所有物理内存时才使用。当虚拟机关闭或暂停时，这些文件将删除。</li><li>.vmss 文件：这个文件用于虚拟机暂停时，保存虚拟机的存储内容，以便在重新开始时继续运行。</li><li>.vmsd 文件：这个文件与快照一起使用，用于存储元数据和其他活动在虚拟机里的每个快照的信息。这个文本文件在创建快照之前的初始大小是 0 字节，并在每次创建或删除快照时更新信息。</li><li>.vmsn 文件：这个文件与快照一起使用，用于存储虚拟机在进行快照时的状态。每在虚拟机上创建一个快照就会生成一个 .vmsn 文件，在删除快照时，文件自动删除。</li><li>.log 文件：这些文件创建来用于存储虚拟机的日志信息，并常常用于故障检查。在虚拟机目录里，有大量的这样的文件。当前的日志文件通常命名为 vmware.log。</li><li>.vmxf 文件：这是一个附加配置文件，不用于 ESX，用于与 Workstation 兼容的目的。这个文件是文本格式，Workstation 用来聚合虚拟机（VM teaming），将多个虚拟机分配成一组，作为一个单一对象开启或关闭、暂停或恢复它们。</li></ul><h2 id="virt-v2v-迁移-VMware-ESX-虚拟机"><a href="#virt-v2v-迁移-VMware-ESX-虚拟机" class="headerlink" title="virt-v2v 迁移 VMware ESX 虚拟机"></a>virt-v2v 迁移 VMware ESX 虚拟机</h2><p>从 RHEL6（Red Hat Enterprise Linux 6）开始，RHEL 发行版中包含了 Red Hat 公司开发的 virt-v2v 工具。它是由 perl 语言编写的脚本，可以自动化的将创建在 Xen，KVM 和 VMware ESX 上的虚拟机拷贝到 virt-v2v 的主机，并且自动的更改配置，使之能够被 libvirt 进行管理。目前，virt-v2v 支持静态迁移下列虚拟机：RHEL4、RHEL5, RHEL6，Windows XP，Windows Vista, Windows 7, Windows Server 2003 和 Windows Server 2008。</p><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-2-56.png" alt></p><p><strong>图 2. virt-v2v 迁移 VMware/Xen/KVM 虚拟机示意图</strong></p><p>本节中，将分别介绍如何使用 virt-v2v 工具迁移 Vmware ESXi 上的 RHEL 虚拟机和 Windows 7 虚拟机到 KVM 主机。</p><h3 id="迁移前的环境设置"><a href="#迁移前的环境设置" class="headerlink" title="迁移前的环境设置"></a>迁移前的环境设置</h3><p>本文的 KVM 主机安装最新的 RHEL6.1 操作系统（发布于 2011 年 5 月 19 日）。这样，最基本的支持 KVM 虚拟机的软件 qemu-kvm、libvirt、virt-manager 和 virt-v2v 工具都在发行版中安装了。</p><p><strong>清单 1. 支持 KVM 虚拟机的软件包</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# rpm -qa qemu-kvm </span><br><span class="line">qemu-kvm-0.12.1.2-2.160.el6.x86_64 </span><br><span class="line">[root@localhost ~]# rpm -qa libvirt </span><br><span class="line">libvirt-0.8.7-18.el6.x86_64 </span><br><span class="line">[root@localhost ~]# rpm -qa virt-manager </span><br><span class="line">virt-manager-0.8.6-4.el6.noarch </span><br><span class="line">[root@localhost ~]# rpm -qa virt-v2v </span><br><span class="line">virt-v2v-0.7.1-3.el6.x86_64</span><br></pre></td></tr></table></figure><p>为了使 virt-v2v 工具能够自动化的迁移 VMware ESX 虚拟机，尽量减少手动干预，还需要在 KVM 主机上做一些设置。</p><p><strong>1. 安装支持 Windows 虚拟机迁移的软件。</strong></p><p>对于 Windows 虚拟机的迁移需要安装 libguestfs-winsupport 包来支持 NTFS 文件系统和 virtio-win 包来支持 Windows para-virtualized 存储和网络设备驱动。</p><p><strong>清单 2. 安装 Windows 虚拟机迁移的支持包</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@victory4 v2v]# rpm -ivh libguestfs-winsupport-1.0-7.el6.x86_64.rpm  \</span><br><span class="line">virtio-win-1.2.0-1.el6.noarch.rpm </span><br><span class="line">Preparing...               ########################################### [100%] </span><br><span class="line">  1:virtio-win             ########################################### [ 50%] </span><br><span class="line">  2:libguestfs-winsupport  ########################################### [100%]</span><br></pre></td></tr></table></figure><p><strong>2. 创建 KVM 主机存储域</strong></p><p>virt-v2v 在迁移虚拟机的过程中，需要拷贝被迁移虚拟机到 KVM 主机预先定义的存储池中。存储池可以用 libvirt 工具创建。最简单的方法就是使用 virt-manager 来创建新的存储池。本文中创建了一个文件目录类型的存储池，位置在 KVM 主机系统的 /home/images/migration 目录。</p><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-3-2.png" alt></p><p><strong>图 3. 使用 virt-manager 创建本地存储域</strong></p><p><strong>3. 创建 KVM 主机网络接口</strong></p><p>虚拟机在迁移之后将连接 KVM 主机网络， 因此主机必须有一个与之相匹配的网络接口，比如说网桥。Linux 系统上有很多工具可以创建网桥，其中 RHEL6.1 发行版上的 virt-manager 已经支持创建和管理网桥。本文创建了网桥 br0，并且绑定在 eth0 的接口上，具体配置如下图。</p><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-3-8.png" alt></p><p><strong>图 4. 使用 virt-manager 创建网桥</strong></p><ol start="4"><li>创建配置文件 virt-v2v.conf</li></ol><p>在 virt-v2v.conf 文件中设置 virt-v2v 迁移的规则，包括网络接口迁移后的映射，迁移的方式，存储的位置，输出的格式等等。这些规则也能以命令行参数的方式输入，如 - - network，-o，-os，-of 等。</p><h3 id="virt-v2v-迁移-VMware-虚拟机的步骤"><a href="#virt-v2v-迁移-VMware-虚拟机的步骤" class="headerlink" title="virt-v2v 迁移 VMware 虚拟机的步骤"></a>virt-v2v 迁移 VMware 虚拟机的步骤</h3><p>在 KVM 主机上完成上节的准备工作后，可以正式开始迁移 VMware ESX 上的虚拟机了。下面是迁移的具体步骤：</p><ol><li>如果虚拟机上安装了 VMware Tools，必须先卸载它。因为 KVM 的虚拟机不支持 VMware Tools 里面的虚拟驱动。</li><li>在 VMware ESX 上停止等待迁移的虚拟机，因为 virt-v2v 只支持静态迁移。</li><li>为自动登录 VMware ESX 服务器创建 .netrc 文件。VMware ESX 服务器的连接需要授权，virt-v2v 支持密码方式的授权连接，可以从 $HOME/.netrc 文件中读取密码并自动登录。如果主机系统没有这个文件，就手动创建它。并且 .netrc 文件需要 0600 权限，使 virt-v2v 工具可以正确读取它。</li></ol><p><strong>清单 3. .netrc 文件的格式</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">machine esx.example.com login root password xxxxxx</span><br></pre></td></tr></table></figure><ol start="4"><li>使用 virt-v2v 命令进行迁移。VMware ESX 服务器采用 HTTPS 连接方式，连接时需要配置 SSL 证书。本文通过添加’?no_verify=1’; 到 VMware 服务器的 URI 连接中，来关闭证书检查。</li></ol><p><strong>清单 4. virt-v2v 迁移命令及参数</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">virt-v2v -ic esx://esx.example.com/?no_verify=1 -os pool --bridge brname vm-name </span><br><span class="line">esx.example.com – 是 ESX 服务器主机名或 IP Address </span><br><span class="line">pool – 本地主机存储池，用来保存镜像</span><br><span class="line">brname – 本地主机网桥名字，用来连接迁移后的虚拟机网络</span><br><span class="line">vm-name – 虚拟机的名字</span><br></pre></td></tr></table></figure><ol start="5"><li>迁移成功后，虚拟机出现在 virt-manager 管理的虚拟机列表中。通过 virt-manager 工具启动虚拟机。</li><li>检查迁移后的虚拟机的设备驱动。如果需要，重新安装虚拟设备驱动。</li><li>验证迁移后的虚拟机的配置和系统是否和迁移之前一致。</li></ol><h3 id="virt-v2v-迁移实例：Linux-虚拟机-RHEL5-5"><a href="#virt-v2v-迁移实例：Linux-虚拟机-RHEL5-5" class="headerlink" title="virt-v2v 迁移实例：Linux 虚拟机 RHEL5.5"></a>virt-v2v 迁移实例：Linux 虚拟机 RHEL5.5</h3><p>本例将迁移创建在 VMWare ESXi 服务器上的 RHEL5.5 虚拟机到 KVM 主机上，并使迁移后的虚拟机被 libvirt 管理。本例的环境中，VMware ESXi 服务器和 KVM 主机通过网络连接，虚</p><p>拟机镜像被各自的存储管理。</p><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-3-16.png" alt></p><p><strong>图 5. virt-v2v 迁移 RHEL5 虚拟机的环境</strong></p><p>下面就开始正式的迁移 :</p><ol><li>在 VMware ESXi 上检测 RHEL5.5 虚拟机，如果安装了 VMware Tools，先卸载它。</li><li>在 VMware ESXi 上关闭 RHEL5.5 虚拟机。</li><li>在 KVM 主机上创建或修改 $HOME/.netrc 文件，添加 VMware ESXi 服务器的用户名和密码。</li></ol><p><strong>清单 5. 修改 .netrc 文件</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost home]# cat ~/.netrc </span><br><span class="line">machine 9.123.99.913 login root password xxxxxx </span><br><span class="line">[root@localhost home]# chmod 0600 ~/.netrc</span><br></pre></td></tr></table></figure><ol start="4"><li>开始迁移虚拟机。KVM 的存储是迁移前准备好的存储域 migration，文件格式采用 libvirt 支持的 qcow2，网络连接方式与 VMware 虚拟机相同，采用网桥。</li></ol><p><strong>清单 6. 迁移 RHEL5.5 虚拟机</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# virt-v2v -ic esx://9.123.99.193/?no_verify=1 \</span><br><span class="line"> -os migration -of qcow2 --bridge br0 RHEL5.5 </span><br><span class="line"> Using CPU model "cpu64-rhel6"</span><br><span class="line"> RHEL5.5_RHEL5.5: 100% [=============================================]D 0h22m52s </span><br><span class="line"> Using CPU model "cpu64-rhel6"</span><br><span class="line"> virt-v2v: RHEL5.5 configured with virtio drivers </span><br><span class="line"> </span><br><span class="line">参数说明</span><br><span class="line"> -os migration:  迁移虚拟机的镜像文件到主机上的存储池</span><br><span class="line"> -of qcow2：     转换迁移后虚拟机的文件格式</span><br><span class="line"> --bridge br0：  设置迁移后虚拟机的网络映射到网桥 br0 </span><br><span class="line"> RHEL5.5:        Vmware ESXi 上虚拟机的名字，迁移后保持名字一致</span><br></pre></td></tr></table></figure><ol start="5"><li>在 KVM 主机上启动 virt-manager 软件，就会发现迁移后的虚拟机已经被 libvirt 管理了。</li></ol><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-3-24.png" alt></p><p><strong>图 6. virt-manager 管理迁移后的 RHEL5.5 虚拟机</strong></p><ol start="6"><li>深入比较迁移前在 VMware ESXi 上的虚拟机和迁移后在 KVM 上的虚拟机。</li></ol><p><strong>表 1. RHEL5.5 虚拟机迁移前后在 VMware ESXi 和 KVM 上的比较</strong></p><table><thead><tr><th><strong>RHEL5.5</strong></th><th><strong>VMware ESXi</strong></th><th><strong>KVM/Libvirt</strong></th><th><strong>结论</strong></th></tr></thead><tbody><tr><td>CPUs</td><td>Intel Xeon 5160 x2</td><td>QEMU vCPU (cpu64-rhel6)</td><td>数量一致，类型和转化为虚拟 CPU，主频和支持的 flags 有变化</td></tr><tr><td>Memory</td><td>1384M</td><td>1384M</td><td>数量一致</td></tr><tr><td>Hard Disk</td><td>18GB，LSI Logic SCSIVMDK</td><td>18GBvirtio SCSIqcow2</td><td>大小一致，总线接口和文件系统转换为适合 libvirt 的类型</td></tr><tr><td>CDROM</td><td>IDE</td><td>IDE</td><td>类型一致</td></tr><tr><td>Network Adaptor</td><td>MAC 00:0c:29:a9:7b:83Type: e1000vSwitch0DHCP</td><td>MAC 00:0c:29:a9:7b:83Type: virtiobridge br0DHCP</td><td>Mac 相同，网卡类型和连接方式转换为适合 libvirt 的类型</td></tr><tr><td>Video Card</td><td>Vmware SVGA4M Video RAM</td><td>Model: Cirrus9M RAM</td><td>转换为 libvirt 支持的类型</td></tr><tr><td>系统用户</td><td>root/admin001</td><td>root/admin001</td><td>一致</td></tr><tr><td>磁盘分区</td><td>VolGroup00/dev/sda</td><td>VolGroup00/dev/vda</td><td>逻辑卷一致，物理盘符有变化。</td></tr></tbody></table><p>从表中的比较看出，RHEL5.5 从 VMware ESXi 服务器迁移到 KVM 主机上后，由于 Hypervisor 的不同，硬件发生了很大的变化。但是 virt-v2v 工具很好的解决的这个问题，使用 virtio 虚拟设备驱动使 RHEL5.5 系统迁移后能够流畅的运行。除了 RHEL5，virt-v2v 还支持 RHEL4 及 RHEL6 版本的迁移。</p><h3 id="virt-v2v-迁移实例：Windows-虚拟机-WinXP，Win7"><a href="#virt-v2v-迁移实例：Windows-虚拟机-WinXP，Win7" class="headerlink" title="virt-v2v 迁移实例：Windows 虚拟机 WinXP，Win7"></a>virt-v2v 迁移实例：Windows 虚拟机 WinXP，Win7</h3><p>本例中将介绍如何使用 virt-v2v 工具迁移创建在 VMware ESXi 上的 Windows 虚拟机，包括 Windows XP SP3 32bit 中文版和 Windows 7 Professional 32bit 中文版。本节的环境中，KVM 主机上安装了 virt-v2v 及相应的支持包 libguestfs-winsupport 和 virtio-win。VMware ESXi 服务器和 KVM 主机通过网络连接，虚拟机镜像被各自的存储管理。</p><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-3-30.png" alt></p><p><strong>图 7. virt-v2v 迁移 Windows 虚拟机的环境</strong></p><p>下面是正式的迁移步骤：</p><ol><li>在 VMware ESXi 上检测 WinXP 和 Win7 虚拟机，如果安装了 VMware Tools，先卸载它。</li><li>在 VMware ESXi 上关闭 WinXP 和 Win7 虚拟机。</li><li>在 KVM 主机上创建或修改 $HOME/.netrc 文件，添加 VMware ESXi 服务器的用户名和密码。</li><li>开始迁移虚拟机。KVM 的存储是迁移前准备好的存储域 migration，文件格式采用 libvirt 支持的 qcow2，网络连接方式与 VMware 虚拟机相同，采用网桥。</li></ol><p><strong>清单 7. 迁移 WinXP 虚拟机</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# virt-v2v -ic esx://9.123.99.193/?no_verify=1 \</span><br><span class="line">-os migration -of qcow2 --bridge br0 WinXP </span><br><span class="line">Using CPU model "cpu64-rhel6"</span><br><span class="line">WinXP_WinXP: 100% [=========================================================]D 0h11m13s </span><br><span class="line">Using CPU model "cpu64-rhel6"</span><br><span class="line">virt-v2v: WARNING: There is no virtio net driver available in the directory </span><br><span class="line">specified for this version of Windows. The guest will be configured with </span><br><span class="line">a rtl8139 network adapter, but no driver will be installed for it.</span><br><span class="line"> If the rtl8139 driver is not already installed in the guest, you must install </span><br><span class="line"> it manually after conversion. </span><br><span class="line">virt-v2v: WinXP configured with virtio storage only.</span><br></pre></td></tr></table></figure><p><strong>清单 8. 迁移 Win7 虚拟机</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# virt-v2v -ic esx://9.123.99.193/?no_verify=1 \</span><br><span class="line">-os migration -of qcow2 --bridge br0 Win7 </span><br><span class="line">Using CPU model "cpu64-rhel6"</span><br><span class="line">Win7_Win7: 100% [====================================</span><br><span class="line">===================================</span><br><span class="line">=======================================]D 0h35m41s </span><br><span class="line">Using CPU model "cpu64-rhel6"</span><br><span class="line">virt-v2v: Win7 configured with virtio drivers </span><br><span class="line">[root@localhost ~]#</span><br></pre></td></tr></table></figure><ol start="5"><li>迁移完成后，在 KVM 主机上启动 virt-manager 软件，会发现迁移后的 Windows 虚拟机已经被 libvirt 管理了。</li><li>在 KVM 上启动虚拟机后，由于更新了一些虚拟硬件设备，可能需要重新安装驱动程序和重启系统。</li><li>深入比较迁移前在 VMware ESXi 上的虚拟机和迁移后在 KVM 上的虚拟机，</li></ol><p><strong>表 2. WinXP 虚拟机迁移前后在 VMware ESXi 和 KVM 上的比较</strong></p><table><thead><tr><th><strong>WinXP</strong></th><th><strong>VMware ESXi</strong></th><th><strong>KVM/Libvirt</strong></th><th><strong>结论</strong></th></tr></thead><tbody><tr><td>CPUs</td><td>Intel Xeon 5160</td><td>Intel Pentium II 处理器</td><td>数量一致，类型和转化为虚拟 CPU，主频和支持的 flags 有变化</td></tr><tr><td>Memory</td><td>1256M</td><td>1256M</td><td>数量一致</td></tr><tr><td>Hard Disk</td><td>8GB，Vmware Virtual IDEVMDK</td><td>8GBVirtio SCSIqcow2</td><td>大小一致，总线接口和文件系统转换为适合 libvirt 的类型</td></tr><tr><td>CDROM</td><td>VMware IDE</td><td>IDE</td><td>类型一致</td></tr><tr><td>Network Adaptor</td><td>MAC 00:0c:29:83:86:d7Type: PCNETvSwitch0DHCP</td><td>MAC 00:0c:29:83:86:d7Type: rtl8139bridge br0DHCP</td><td>Mac 相同，网卡类型和连接方式转换为适合 libvirt 的类型</td></tr><tr><td>Video Card</td><td>Vmware SVGA4M Video RAM</td><td>Model: Cirrus9M RAM</td><td>转换为 libvirt 支持的类型</td></tr><tr><td>系统</td><td>Administrator/admin001</td><td>Administrator/admin001</td><td>一致</td></tr><tr><td>磁盘分区</td><td>C:\D:\</td><td>C:\D:\</td><td>一致</td></tr></tbody></table><p><strong>表 3. Win7 虚拟机迁移前后在 VMware ESXi 和 KVM 上的比较</strong></p><table><thead><tr><th><strong>Win7</strong></th><th><strong>VMware ESXi</strong></th><th><strong>KVM/Libvirt</strong></th><th><strong>结论</strong></th></tr></thead><tbody><tr><td>CPUs</td><td>Intel Xeon 5160 x 2</td><td>X86 family 6 x 2</td><td>数量一致，类型和转化为虚拟 CPU，主频和支持的 flags 有变化</td></tr><tr><td>Memory</td><td>1024M</td><td>1024M</td><td>数量一致</td></tr><tr><td>Hard Disk</td><td>24GB，LSI Logic SCSIVMDK</td><td>24GBVirtio SCSIqcow2</td><td>大小一致，总线接口和文件系统转换为适合 libvirt 的类型</td></tr><tr><td>CDROM</td><td>VMware IDE</td><td>IDE</td><td>类型一致</td></tr><tr><td>Network Adaptor</td><td>MAC 00:0c:29:64:de:6aType: e1000vSwitch0DHCP</td><td>MAC 00:0c:29:64:de:6aType: virtiobridge br0DHCP</td><td>Mac 相同，网卡类型和连接方式转换为适合 libvirt 的类型</td></tr><tr><td>Video Card</td><td>Vmware SVGA8M Video RAM</td><td>Model: Cirrus9M RAM</td><td>转换为 libvirt 支持的类型</td></tr><tr><td>系统</td><td>Administrator/admin001</td><td>Administrator/admin001</td><td>一致</td></tr><tr><td>磁盘分区</td><td>C:\D:\</td><td>C:\D:\</td><td>一致</td></tr></tbody></table><p>从表中的比较看出，Windows 虚拟机从 VMware ESXi 服务器迁移到 KVM 主机上后，由于 Hypervisor 的不同，硬件发生了很大的变化。Virt-v2v 工具尽量在 KVM 虚拟机上使用 Virtio 虚拟设备加速系统的 IO 设备。WinXP 虚拟机的迁移后，使用了磁盘的 virtio 驱动而网络设备使用默认的 rtl8139。 Win7 虚拟机的迁移后磁盘和网络全部使用 virtio 的驱动。Virt-v2v 还支 Windows Vista，Win2003，Win2008 虚拟机从 VMware ESX/ESXi 上的迁移，步骤和 WinXP，Win7 虚拟机类似。</p><h3 id="virt-v2v-迁移小结"><a href="#virt-v2v-迁移小结" class="headerlink" title="virt-v2v 迁移小结"></a>virt-v2v 迁移小结</h3><p>virt-v2v 工具自动化的解决了 VMware ESX/ESXi 服务器上的 RHEL 虚拟机和 Windows 虚拟机迁移到 KVM 主机的问题。而且在迁移的过程中尽量的使用 virtio 驱动提高 IO 设备的性能。但是，virt-2v2 工具也有一些局限性。比如只支持虚拟机关机情况下的静态迁移；只支持 RHEL 虚拟机和 Windows 虚拟机的迁移；不支持 VMware 虚拟机快照的迁移。对于创建在 VMware Workstation/Player 上的虚拟机，目前 virt-v2v 还不支持自动迁移。但是我们可以用手动迁移的方法完成到 KVM 主机的迁移。请看下节：手动迁移 VMware Workstation/Player 上的虚拟机到 KVM 。</p><h2 id="手动迁移-VMware-Workstation-Player-上的虚拟机到-KVM"><a href="#手动迁移-VMware-Workstation-Player-上的虚拟机到-KVM" class="headerlink" title="手动迁移 VMware Workstation/Player 上的虚拟机到 KVM"></a>手动迁移 VMware Workstation/Player 上的虚拟机到 KVM</h2><p>从物理机的文件系统看，VMware 虚拟机是由一组文件组成。这些文件可能集中存储在存储服务器上，如 VMware ESX/ESXi，也可能存储在本地，如 VMware Workstation/Player。关闭虚拟机的情况下，这些文件内容不会改变。所以我们可以用手动迁移的方法，拷贝这些文件到 KVM 主机并且转换这些文件的格式或内容，使 libvirt 能够管理和识别。这样就完成了 VMware 虚拟机的手动迁移。</p><h3 id="手动迁移的准备工作"><a href="#手动迁移的准备工作" class="headerlink" title="手动迁移的准备工作"></a>手动迁移的准备工作</h3><p>在 VMware 虚拟机众多的文件中，最重要的是虚拟机镜像文件 .vmdk 和系统配置文件 .xml。所以手动迁移就是要分别处理这两种文件。</p><ul><li>合并分散的 vmdk 镜像文件。在 VMware Workstation 上创建虚拟机的时候，可以选择存储虚拟磁盘为一个文件或多个文件。但是 libvirt 不能管理多个文件组成的磁盘镜像，所以需要在迁移前合并这些文件为一个单独的文件。VMware Workstation 自带了离线的磁盘管理工具 vmware-vdiskmanager.exe 来合并 vmdk 文件。</li></ul><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-3-36.png" alt></p><p><strong>图 8. 多个文件存储的 VMware 虚拟机</strong></p><ul><li>qemu-img 转换 vmdk 的文件格式。KVM 主机上安装 qemu-img 包，可以察看并转换 vmdk 文件到 raw/qcow2 文件格式。</li></ul><ul><li>创建 xml 文件。VMware 的系统配置文件是 vmx，必须转换成 libvirt 能够识别的 xml 格式。一种方法是根据 VMware 虚拟机的硬件信息，手动创建一个新的 xml 文件；另一种方法是利用工具辅助转换 vmx 文件。比如 virt-goodies/vmware2libvirt 工具，可以从下面 link 下载安装 virt-goodies：<a href="https://launchpad.net/ubuntu/+source/virt-goodies/0.4" target="_blank" rel="noopener">https://launchpad.net/ubuntu/+source/virt-goodies/0.4</a></li></ul><p>下面我们以 VMware Workstations 上的 SUSE Linux Enterprise Server 11 SP1 虚拟机和 VMware Player 上的 Windows 2008 R2 虚拟机为例，详细介绍迁移到 KVM 主机的步骤。</p><h3 id="手动迁移-VMware-Workstation-上的-SLES11SP1-虚拟机"><a href="#手动迁移-VMware-Workstation-上的-SLES11SP1-虚拟机" class="headerlink" title="手动迁移 VMware Workstation 上的 SLES11SP1 虚拟机"></a>手动迁移 VMware Workstation 上的 SLES11SP1 虚拟机</h3><p>VMware Workstation 软件安装在一个 Windows XP 系统上，然后创建 SLES11SP1 虚拟机。虚拟机的文件都存储在本地。KVM 主机通过网络连接到 Window XP 系统。</p><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-3-43.png" alt></p><p><strong>图 9. 手动迁移 SLES11SP1 虚拟机的环境</strong></p><p>迁移的过程如下：</p><ol><li>登录宿主机 Windows XP 系统，在 VMware Workstation 上检查 SLES11SP1 虚拟机，如果安装了 VMware Tools，以 root 用户运行 vmware-uninstall-tools.pl 卸载它。</li><li>关闭 SLES11SP1 虚拟机。</li><li>检查虚拟机的镜像文件。本例中，虚拟机的镜像存储在多个 vmdk 文件中，所以需要在迁移前合并他们。</li></ol><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-3-48.png" alt></p><p><strong>图 10. 用 vmware-vdiskmanager.exe 合并多个 vmdk 文件</strong></p><ol start="4"><li>拷贝合并后的 vmdk 文件到 KVM 主机上。本例中，拷贝文件 SLES11SP1-single.vmdk 到 KVM 主机的 /home/images/migration 目录下。并且使用 qemu-img 工具将 vmdk 文件转换成 qcow2 格式的文件。可以看出，转换后镜像文件 SLES11SP1-single.img 的实际大小 3.9G 和最大范围 20G 没有改变，仅仅是文件系统类型变化了。</li></ol><p><strong>清单 9. 转换 vmdk 文件到 qcow2 格式</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost migration]# qemu-img info SLES11SP1-single.vmdk </span><br><span class="line">image: SLES11SP1-single.vmdk </span><br><span class="line">file format: vmdk </span><br><span class="line">virtual size: 20G (21474836480 bytes) </span><br><span class="line">disk size: 3.9G </span><br><span class="line"> </span><br><span class="line">[root@localhost migration]# qemu-img convert -f vmdk \</span><br><span class="line">-O qcow2 SLES11SP1-single.vmdk SLES11SP1-single.img </span><br><span class="line"> </span><br><span class="line">[root@localhost migration]# qemu-img info SLES11SP1-single.img </span><br><span class="line">image: SLES11SP1-single.img </span><br><span class="line">file format: qcow2 </span><br><span class="line">virtual size: 20G (21474836480 bytes) </span><br><span class="line">disk size: 3.9G </span><br><span class="line">cluster_size: 65536</span><br></pre></td></tr></table></figure><ol start="5"><li>转换 vmx 文件。本例介绍第一种方法，即手动创建 vmx 文件。首先要找出 SLES11SP1 虚拟机全部虚拟设备信息，这些信息可以从 VMware Workstation 的管理界面和虚拟机系统的系统信息获得；然后在 KVM 主机上的 virt-manager 中，以第 4 步转换完成的镜像文件 SLES11SP1-single.img 为基础创建一个虚拟机；最后添加与 VMware 相同或类似的硬件，并且尽量保证数量、类型和配置的一致，包括 CPU 和 MEM 数量、系统构架、网络类型、MAC 地址等。</li></ol><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-4-10.png" alt></p><p><strong>图 11. VMware Workstation 上查看虚拟机的硬件信息</strong></p><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-4-16.png" alt></p><p><strong>图 12. 手动配置 KVM 虚拟机</strong></p><ol start="6"><li>设置完成后，自动创建 KVM 虚拟机的配置文件 /etc/libvirt/qemu/SLES11SP1.xml，并且 virt-manager 可以管理这个 SLES 虚拟机了。在 libvirt 上启动虚拟机，手动配置虚拟机系统以适应新的硬件。</li><li>深入比较迁移前在 VMware Workstation 上的虚拟机和迁移后在 KVM 上的虚拟机。</li></ol><p><strong>表 4. SLES11SP1 虚拟机迁移前后在 VMware Workstation 和 KVM 上的比较</strong></p><table><thead><tr><th><strong>SLES11SP1</strong></th><th><strong>VMware Workstation</strong></th><th><strong>KVM/Libvirt</strong></th><th><strong>结论</strong></th></tr></thead><tbody><tr><td>CPUs</td><td>Intel Core2 x 2</td><td>QEMU vCPU x 2</td><td>数量一致，类型和转化为虚拟 CPU，主频和支持的 flags 有变化</td></tr><tr><td>Memory</td><td>768M</td><td>768M</td><td>数量一致</td></tr><tr><td>Hard Disk</td><td>20GBLSI Logic SCSIVMDK</td><td>20GBIDEqcow2</td><td>大小一致，总线接口和文件系统转换为适合 libvirt 的类型</td></tr><tr><td>CDROM</td><td>IDE</td><td>IDE</td><td>类型一致</td></tr><tr><td>Floppy</td><td></td><td></td><td>类型一致</td></tr><tr><td>USB Controller</td><td>USB 2.0</td><td>Physical USB device</td><td>libvirt 对 USB 的支持较弱</td></tr><tr><td>Network Adaptor</td><td>MAC 00:0c:29:68:16:33Type: PCNetNATVirtual DHCP</td><td>MAC 00:0c:29:a9:7b:83Type: VirtioNATVirtual DHCP</td><td>Mac 相同，网卡类型和连接方式转换为适合 libvirt 的类型</td></tr><tr><td>Video Card</td><td>Vmware SVGA</td><td>Model: Cirrus9M RAM</td><td>转换为 libvirt 支持的类型</td></tr><tr><td>Audio device</td><td>ES1371</td><td>ES1370</td><td>转换为 libvirt 支持的类型</td></tr><tr><td>系统用户</td><td>root/admin001</td><td>root/admin001</td><td>一致</td></tr><tr><td>磁盘分区</td><td>/dev/sda1/dev/sda2</td><td>/dev/sda1/dev/sda2</td><td>物理盘符及系统分区一致</td></tr></tbody></table><p>和使用 virt-v2v 自动化迁移工具相比，手动迁移增加了很多工作和不确定性。在本系列文章第一篇列举了”Linux 系统在虚拟机迁移中的技术难点”，此处正好验证了手动迁移中需要注意的问题。比如在本例中，有以下两个问题：</p><ul><li>如何选择磁盘总线类型。virt-v2v 工具自动选择 virtio 磁盘驱动来提高 KVM 虚拟机的性能，但是在本例中，SLES 虚拟机不能直接使用 virtio 磁盘驱动。因为 SLES 系统的磁盘分区名在 /etc/fstab 被硬编码为 /dev/sda，而 virtio 磁盘分区名为 /dev/vda，直接使用 virtio 磁盘驱动会导致系统找不到分区而无法启动的错误。所以本例为 KVM 虚拟机选择了性能较差的 IDE 磁盘类型。</li></ul><ul><li>Xwindow 需要重新配置。SLES 虚拟机不能自动处理显示设备的变化，所以需要手动运行 SaX2 重新配置 Xwindow 并重新启动 gdm。</li></ul><p>实际上，手动把 SLES 虚拟机里面关于磁盘分区的硬编码全部改成 UUID 后，就可以使用高性能的 virtio 磁盘驱动。具体操作方法将在本系列文章的第五部分介绍。</p><h3 id="手动迁移-VMware-Player-上的-Win2008R2-虚拟机"><a href="#手动迁移-VMware-Player-上的-Win2008R2-虚拟机" class="headerlink" title="手动迁移 VMware Player 上的 Win2008R2 虚拟机"></a>手动迁移 VMware Player 上的 Win2008R2 虚拟机</h3><p>VMware Player 软件安装在 Linux 系统上，然后创建了 Windows 2008 R2 虚拟机。虚拟机的文件都存储在本地。KVM 主机通过网络连接到 VMware Player 的主机系统。</p><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-4-26.png" alt></p><p><strong>图 13. 手动迁移 Win2008R2 虚拟机的环境设置</strong></p><p>迁移的过程如下：</p><ol><li>登录宿主机 Linux 系统，在 VMware Player 上检查 Win2008R2 虚拟机，如果安装了 VMware Tools，必须先卸载它。</li><li>关闭 Win2008R2 虚拟机，因为手动迁移必须保持虚拟机文件的一致性。</li><li>检查虚拟机的镜像文件。如果虚拟机的镜像存储在多个 vmdk 文件中，需要在迁移前合并。本例的 VMware 虚拟机存储在单独的 vmdk 文件中，所以略过此步。</li><li>拷贝 vmdk 文件到 KVM 主机上。本例中，拷贝 Win2008R2.vmdk 文件到 KVM 主机的 /home/images/migration 目录下。并且使用 qemu-img 工具将 vmdk 文件转换成 qcow2 格式的文件。可以看出，转换后镜像文件 Win2008R2.img 的实际大小 6.4G 和最大范围 20G 没有改变，仅仅是文件系统类型变化了。</li></ol><p><strong>清单 10. 转换 vmdk 文件到 qcow2 格式</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost migration]# qemu-img info Win2008R2.vmdk </span><br><span class="line">image: Win2008R2.vmdk </span><br><span class="line">file format: vmdk </span><br><span class="line">virtual size: 20G (21474836480 bytes) </span><br><span class="line">disk size: 6.4G </span><br><span class="line"> </span><br><span class="line">[root@localhost migration]# qemu-img convert -f vmdk \</span><br><span class="line">-O qcow2 Win2008R2.vmdk Win2008R2.img </span><br><span class="line"> </span><br><span class="line">[root@localhost migration]# qemu-img info Win2008R2.img </span><br><span class="line">image: Win2008R2.img </span><br><span class="line">file format: qcow2 </span><br><span class="line">virtual size: 20G (21474836480 bytes) </span><br><span class="line">disk size: 6.4G </span><br><span class="line">cluster_size: 65536</span><br></pre></td></tr></table></figure><ol start="5"><li>转换 vmx 文件。virt-goodies/vmware2libvirt 脚本是用来做 vmx 到 xml 转换的简单工具。但是由于它很长时间没有升级，而且不同的 Linux 发行版对 KVM/libvirt 安装方式不同，vmware2libvirt 工具转换后的 xml 文件需要手动更改或添加某些配置。</li></ol><ul><li>注意不同 Linux 发行版 qemu-kvm 的路径不同，RHEL6.1 下是 /usr/libexec/qemu-kvm。</li></ul><ul><li>把虚拟机的镜像文件路径及名字改成 /home/images/migration/Win2008R2.img。</li></ul><ul><li>vmware2libvirt 只转换第一块网卡，如果有多块网卡需要手动添加。</li></ul><ul><li>vmware2libvirt 不转换 CDROM、Floppy、USB 和显示设备，需要手动为 KVM 虚拟机添加。</li><li>磁盘和网卡采用默认的驱动程序，因为 Windows 系统没有预装 virtio 驱动。</li></ul><p><strong>清单 11. vmware2libvirt 转换 vmx 文件</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost migration]# /home/vmware2libvirt \</span><br><span class="line"> -f Win2008R2.vmx &gt; /etc/libvirt/qemu/Win2008R2.xml </span><br><span class="line">添加 Win2008R2 到 virt-manager </span><br><span class="line"> [root@localhost migration]# virsh -c qemu:///system \</span><br><span class="line"> define /etc/libvirt/qemu/Win2008R2.xml </span><br><span class="line"> Domain Win2008R2 defined from /etc/libvirt/qemu/Win2008R2.xml</span><br></pre></td></tr></table></figure><ol start="6"><li>在 virt-manager 中启动 Win2008R2 虚拟机，手动添加缺少的硬件。</li></ol><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-4-38.png" alt></p><p><strong>图 14. KVM 上 Win2008R2 虚拟机的配置</strong></p><ol start="7"><li>启动虚拟机，检查系统状态。</li></ol><p><strong>表 5. Win2008R2 虚拟机迁移前后在 VMware Player 和 KVM 上的比较</strong></p><table><thead><tr><th><strong>Win2008R2</strong></th><th><strong>VMware Player</strong></th><th><strong>KVM/Libvirt</strong></th><th><strong>结论</strong></th></tr></thead><tbody><tr><td>CPUs</td><td>Intel Core Duo 2.66G x 2</td><td>QEMU vCPU 2.66G x 2</td><td>数量一致，类型和转化为虚拟 CPU，主频和支持的 flags 有变化</td></tr><tr><td>Memory</td><td>1024M</td><td>1024M</td><td>数量一致</td></tr><tr><td>Hard Disk</td><td>20GB，LSI Logic SCSIVMDK</td><td>20GBIDEqcow2</td><td>大小一致，总线接口和文件系统转换为适合 libvirt 的类型</td></tr><tr><td>CDROM</td><td>VMware IDE</td><td>IDE</td><td>类型一致</td></tr><tr><td>Network Adaptor</td><td>MAC 00:0c:29:aa:9b:a4Type: e1000NAT</td><td>MAC 00:0c:29:aa:9b:a4Type: e1000NAT</td><td>Mac 地址、网卡类型和连接方式相同</td></tr><tr><td>Video Card</td><td>Vmware SVGA</td><td>Model: Cirrus9M RAM</td><td>转换为 libvirt 支持的类型</td></tr><tr><td>系统</td><td>Administrator/qwe123OP</td><td>Administrator/qwe123OP</td><td>一致</td></tr><tr><td>磁盘分区</td><td>C:\D:\</td><td>C:\D:\</td><td>一致</td></tr></tbody></table><p>由上表可以看出，Win2008R2 虚拟机迁移到 KVM 后，虽然硬件有变化，但是不影响操作系统及软件的运行。这此迁移过程中没有使用任何 virtio 的驱动程序，因为 Windows 系统本身没有 virtio 的驱动。如果想使用 virtio 来提高 KVM 虚拟机的性能，参见下节如何用 virtio 驱动光盘或软盘手动安装。</p><h3 id="在-Windows-虚拟机上手动安装-virtio-驱动"><a href="#在-Windows-虚拟机上手动安装-virtio-驱动" class="headerlink" title="在 Windows 虚拟机上手动安装 virtio 驱动"></a>在 Windows 虚拟机上手动安装 virtio 驱动</h3><p>实际上，virtio 驱动光盘镜像文件和软盘镜像文件包含在清单 2 列出的 virtio-win 包中。只需要在虚拟机的虚拟光驱或软驱中装载这些镜像文件，就可以升级磁盘和网卡驱动为 virtio 驱动了。</p><p><strong>清单 12. virtio 光盘镜像和软盘镜像文件</strong></p><figure class="highlight shell hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost migration]# rpm -ql virtio-win </span><br><span class="line">....... </span><br><span class="line">/usr/share/virtio-win/virtio-win-1.2.0.iso </span><br><span class="line">/usr/share/virtio-win/virtio-win-1.2.0.vfd </span><br><span class="line">/usr/share/virtio-win/virtio-win.iso </span><br><span class="line">/usr/share/virtio-win/virtio-win.vfd</span><br></pre></td></tr></table></figure><p>下面以上一个小节中，迁移到 KVM 的 Win2008R2 虚拟机为例，介绍如何在 Windows 虚拟机上安装 virtio 驱动。</p><ol><li>在虚拟光驱中加载 virtio 镜像。</li></ol><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-4-32.png" alt></p><p><strong>图 15. 加载 virtio 光盘镜像</strong></p><ol start="2"><li>更改网卡的类型为 virtio，这样系统启动后可以从 virtio 光盘升级网卡驱动程序。</li><li>此时不能更改磁盘的驱动类型。因为此时 virtio 驱动还没有安装，直接更改磁盘类型会导致系统无法启动的错误。替代方法是临时添加一块新的磁盘，大小随意，类型为 virtio。</li></ol><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-4-45.png" alt></p><p><strong>图 16. 添加临时 virtio 磁盘</strong></p><ol start="4"><li>启动虚拟机并登陆系统，查看硬件设备管理器。发现缺少了网卡和磁盘控制器的驱动。用 virtio 光盘中的驱动安装他们。</li></ol><p><img src="https://imgs.borgor.cn/imgs/imgs-%E8%BF%81%E7%A7%BBVmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%B0KVM-2019-6-25-11-4-50.png" alt></p><p><strong>图 17. 安装 virtio 驱动</strong></p><ol start="5"><li>安装完成后，关闭虚拟机。删除临时磁盘并把主磁盘的类型改为 virtio，然后启动虚拟机。这时你会发现 Win2008R2 虚拟机已经用上 virtio 的磁盘和网卡设备了。</li></ol><p>目前 virtio 光盘镜像包含 WinXP、Win7、Win2003 和 Win2008 四个平台的驱动程序，都可以用上面这种方法手动安装。</p><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>以上章节详细介绍了几种迁移 VMware 虚拟机到 KVM 的方法，下面总结一下各种迁移方法的的优缺点。</p><ul><li>virt-v2v 工具是专门针对 VMware ESX/ESXi 的自动化迁移工具，而且支持的虚拟机系统仅限于 RHEL 和 Windows 虚拟机。Virt-v2v 在迁移后的 KVM 虚拟机中优先使用 virtio 虚拟驱动来提高系统 IO 的性能。如果不支持，才选用性能稍低，但更稳定可靠的虚拟硬件。而且这个过程全部自动化完成。</li></ul><ul><li>手动迁移可以涵盖所有的 VMware 软件和所有的虚拟机系统。从而迁移中面临的问题也是多样化的，需要不同程度的手动干预。某些特定的环境下，可以使用一些工具来辅助手动迁移，比如 virt-goodies/vmware2libvirt。另外 libvirt 也在开发支持 VMware Workstation/Player 迁移的新功能。</li></ul><p>不论是 virt-v2v 自动化工具还是手动迁移，由于商业软件 VMware 开放的编程接口的限制，VMware 虚拟机到 KVM 的迁移有一些软肋：</p><ol><li>一些 VMware 虚拟机的特性没有办法迁移到 KVM 虚拟机上。比如 VMware 虚拟机广泛使用的快照功能。</li></ol><ol><li>只能实现关闭虚拟机情况下的静态迁移，无法做到虚拟机不关机情况下的在线迁移。</li><li>一些特殊的 VMware 设备不能迁移到 KVM 虚拟机，于是采用了类似功能的硬件设备替代。比如 VMware Tools 中的虚拟驱动、VMware SVGA、VMware USB Controller 等。</li></ol><p>总的来说，VMware 虚拟机到 KVM 的迁移不够成熟和自动化，迁移的过程需要手动干预。这要求迁移的操作人员具有相关的知识和经验。开源工具 virt-v2v 的出现简化了 VMware ESX/ESXi 上部分虚拟机的迁移，而且计划将来支持 VMware Workstation/Player 上虚拟机的自动迁移。反言之，自动化的迁移工具不就是用脚本语言把手动迁移的步骤和条件程序化么？掌握了手动迁移，才能了解虚拟机迁移更多的奥秘。</p><div><h1>推荐文章<span style="font-size:.45em;color:gray">（由<a href="https://github.com/huiwang/hexo-recommended-posts" target="_blank" rel="noopener">hexo文章推荐插件</a>驱动）</span></h1><ul><li><a href="http://www.borgor.cn/2017-10-25/e3b04838.html">OpenStack相关服务端口</a></li><li><a href="https://abelsu7.top/2019/09/02/virtio-in-kvm/" target="_blank" rel="noopener">半虚拟化 I/O 框架 virtio</a></li></ul></div><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/kity@2.0.4/dist/kity.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/kityminder-core@1.4.50/dist/kityminder.core.min.js"></script><script defer type="text/javascript" src="https://cdn.jsdelivr.net/npm/hexo-simple-mindmap@0.2.0/dist/mindmap.min.js"></script><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/hexo-simple-mindmap@0.2.0/dist/mindmap.min.css"></div><div class="level is-size-7 is-uppercase"><div class="level-start"><div class="level-item"><span class="is-size-6 has-text-grey has-mr-7">#</span> <a class="has-link-grey -link" href="/tags/KVM/" rel="tag">KVM</a>, <a class="has-link-grey -link" href="/tags/Oprations/" rel="tag">Oprations</a>, <a class="has-link-grey -link" href="/tags/Vmware/" rel="tag">Vmware</a></div></div></div></div></div><div class="card"><div class="card-content"><h3 class="menu-label has-text-centered">喜欢这篇文章？打赏一下作者吧</h3><div class="buttons is-centered"><a class="button is-info donate"><span class="icon is-small"><i class="fab fa-alipay"></i> </span><span>支付宝</span><div class="qrcode"><img src="https://imgs.borgor.cn/imgs20190628231540.png" alt="支付宝"></div></a><a class="button is-success donate"><span class="icon is-small"><i class="fab fa-weixin"></i> </span><span>微信</span><div class="qrcode"><img src="https://imgs.borgor.cn/imgs20190628231554.png" alt="微信"></div></a></div></div></div><div class="card card-transparent"><div class="level post-navigation is-flex-wrap is-mobile"><div class="level-start"><a class="level level-item has-link-grey article-nav-prev" href="/2017-10-25/e3b04838.html"><i class="level-item fas fa-chevron-left"></i> <span class="level-item">OpenStack相关服务端口</span></a></div><div class="level-end"><a class="level level-item has-link-grey article-nav-next" href="/2017-09-14/2bb48a1b.html"><span class="level-item">Keystone=API中的策略与规则映射表</span> <i class="level-item fas fa-chevron-right"></i></a></div></div></div><div class="card"><div class="card-content"><h3 class="title is-5 has-text-weight-normal">评论</h3><div id="valine-thread" class="content"></div><script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script><script src="//unpkg.com/valine/dist/Valine.min.js"></script><script>new Valine({el:"#valine-thread",notify:!1,verify:!1,app_id:"ybhyfHG9S4TQhIvstdj5pprw-gzGzoHsz",app_key:"ob8A13IBceQXqd8g92nUgNMx",placeholder:"你有想说的么？"})</script></div></div></div><div class="column is-4-tablet is-3-desktop is-3-widescreen has-order-1 column-left"><div class="card widget"><div class="card-content"><nav class="level"><div class="level-item has-text-centered"><div><figure class="image is-128x128 has-mb-6"><img class="is-rounded" src="https://imgs.borgor.cn/imgs20190625111723.jpg" alt="BorGor"></figure><p class="is-size-4 is-block">BorGor</p><p class="is-size-6 is-block">Note?Note!</p><p class="is-size-6 is-flex is-flex-center has-text-grey"><i class="fas fa-map-marker-alt has-mr-7"></i> <span>Lanzhou.Gansu</span></p></div></div></nav><nav class="level is-mobile"><div class="level-item has-text-centered is-marginless"><div><p class="heading">文章</p><p class="title has-text-weight-normal">86</p></div></div><div class="level-item has-text-centered is-marginless"><div><p class="heading">分类</p><p class="title has-text-weight-normal">26</p></div></div><div class="level-item has-text-centered is-marginless"><div><p class="heading">标签</p><p class="title has-text-weight-normal">153</p></div></div></nav><div class="level"><a class="level-item button is-link is-rounded" href="/" target="_blank">关注我</a></div><div class="level is-mobile"><a class="level-item button is-white is-marginless" target="_blank" title="Github" href="https://github.com/cyrusky"><i class="fab fa-github"></i></a></div></div></div><div class="card widget" id="toc"><div class="card-content"><div class="menu"><h3 class="menu-label">目录</h3><ul class="menu-list"><ul class="menu-list"><li><a class="is-flex" href="#前言"><span class="has-mr-6">1.1</span> <span>前言</span></a></li><li><a class="is-flex" href="#VMware-虚拟机迁移到-KVM-的方式"><span class="has-mr-6">1.2</span> <span>VMware 虚拟机迁移到 KVM 的方式</span></a></li><li><a class="is-flex" href="#VMware-虚拟化产品及虚拟机文件"><span class="has-mr-6">1.3</span> <span>VMware 虚拟化产品及虚拟机文件</span></a><ul class="menu-list"><li><a class="is-flex" href="#VMware-产品简介"><span class="has-mr-6">1.3.1</span> <span>VMware 产品简介</span></a></li><li><a class="is-flex" href="#VMware-虚拟机文件介绍"><span class="has-mr-6">1.3.2</span> <span>VMware 虚拟机文件介绍</span></a></li></ul></li><li><a class="is-flex" href="#virt-v2v-迁移-VMware-ESX-虚拟机"><span class="has-mr-6">1.4</span> <span>virt-v2v 迁移 VMware ESX 虚拟机</span></a><ul class="menu-list"><li><a class="is-flex" href="#迁移前的环境设置"><span class="has-mr-6">1.4.1</span> <span>迁移前的环境设置</span></a></li><li><a class="is-flex" href="#virt-v2v-迁移-VMware-虚拟机的步骤"><span class="has-mr-6">1.4.2</span> <span>virt-v2v 迁移 VMware 虚拟机的步骤</span></a></li><li><a class="is-flex" href="#virt-v2v-迁移实例：Linux-虚拟机-RHEL5-5"><span class="has-mr-6">1.4.3</span> <span>virt-v2v 迁移实例：Linux 虚拟机 RHEL5.5</span></a></li><li><a class="is-flex" href="#virt-v2v-迁移实例：Windows-虚拟机-WinXP，Win7"><span class="has-mr-6">1.4.4</span> <span>virt-v2v 迁移实例：Windows 虚拟机 WinXP，Win7</span></a></li><li><a class="is-flex" href="#virt-v2v-迁移小结"><span class="has-mr-6">1.4.5</span> <span>virt-v2v 迁移小结</span></a></li></ul></li><li><a class="is-flex" href="#手动迁移-VMware-Workstation-Player-上的虚拟机到-KVM"><span class="has-mr-6">1.5</span> <span>手动迁移 VMware Workstation/Player 上的虚拟机到 KVM</span></a><ul class="menu-list"><li><a class="is-flex" href="#手动迁移的准备工作"><span class="has-mr-6">1.5.1</span> <span>手动迁移的准备工作</span></a></li><li><a class="is-flex" href="#手动迁移-VMware-Workstation-上的-SLES11SP1-虚拟机"><span class="has-mr-6">1.5.2</span> <span>手动迁移 VMware Workstation 上的 SLES11SP1 虚拟机</span></a></li><li><a class="is-flex" href="#手动迁移-VMware-Player-上的-Win2008R2-虚拟机"><span class="has-mr-6">1.5.3</span> <span>手动迁移 VMware Player 上的 Win2008R2 虚拟机</span></a></li><li><a class="is-flex" href="#在-Windows-虚拟机上手动安装-virtio-驱动"><span class="has-mr-6">1.5.4</span> <span>在 Windows 虚拟机上手动安装 virtio 驱动</span></a></li></ul></li><li><a class="is-flex" href="#小结"><span class="has-mr-6">1.6</span> <span>小结</span></a></li></ul><li><a class="is-flex" href="#undefined"><span class="has-mr-6">2</span> <span>推荐文章（由hexo文章推荐插件驱动）</span></a></li></ul></div></div></div><div class="card widget"><div class="card-content"><div class="menu"><h3 class="menu-label">分类</h3><ul class="menu-list"><li><a class="level is-marginless" href="/categories/AI/"><span class="level-start"><span class="level-item">AI</span> </span><span class="level-end"><span class="level-item tag">20</span></span></a><ul><li><a class="level is-marginless" href="/categories/AI/Machine-Learning/"><span class="level-start"><span class="level-item">Machine Learning</span> </span><span class="level-end"><span class="level-item tag">6</span></span></a></li><li><a class="level is-marginless" href="/categories/AI/Mathematics/"><span class="level-start"><span class="level-item">Mathematics</span> </span><span class="level-end"><span class="level-item tag">9</span></span></a></li><li><a class="level is-marginless" href="/categories/AI/NLP/"><span class="level-start"><span class="level-item">NLP</span> </span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-marginless" href="/categories/AI/%E5%85%AC%E5%BC%8F%E6%8E%A8%E5%AF%BC/"><span class="level-start"><span class="level-item">公式推导</span> </span><span class="level-end"><span class="level-item tag">4</span></span></a></li></ul></li><li><a class="level is-marginless" href="/categories/CheatSheets/"><span class="level-start"><span class="level-item">CheatSheets</span> </span><span class="level-end"><span class="level-item tag">4</span></span></a></li><li><a class="level is-marginless" href="/categories/DevOps/"><span class="level-start"><span class="level-item">DevOps</span> </span><span class="level-end"><span class="level-item tag">8</span></span></a><ul><li><a class="level is-marginless" href="/categories/DevOps/Anti-patterns/"><span class="level-start"><span class="level-item">Anti-patterns</span> </span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-marginless" href="/categories/DevOps/Concept/"><span class="level-start"><span class="level-item">Concept</span> </span><span class="level-end"><span class="level-item tag">3</span></span></a></li><li><a class="level is-marginless" href="/categories/DevOps/Continuous-Delivery/"><span class="level-start"><span class="level-item">Continuous Delivery</span> </span><span class="level-end"><span class="level-item tag">2</span></span></a></li><li><a class="level is-marginless" href="/categories/DevOps/TeamWorks/"><span class="level-start"><span class="level-item">TeamWorks</span> </span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-marginless" href="/categories/DevOps/Testing/"><span class="level-start"><span class="level-item">Testing</span> </span><span class="level-end"><span class="level-item tag">1</span></span></a></li></ul></li><li><a class="level is-marginless" href="/categories/Development/"><span class="level-start"><span class="level-item">Development</span> </span><span class="level-end"><span class="level-item tag">33</span></span></a><ul><li><a class="level is-marginless" href="/categories/Development/Integrated/"><span class="level-start"><span class="level-item">Integrated</span> </span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-marginless" href="/categories/Development/JavaScript/"><span class="level-start"><span class="level-item">JavaScript</span> </span><span class="level-end"><span class="level-item tag">18</span></span></a></li><li><a class="level is-marginless" href="/categories/Development/Native/"><span class="level-start"><span class="level-item">Native</span> </span><span class="level-end"><span class="level-item tag">2</span></span></a></li><li><a class="level is-marginless" href="/categories/Development/Python/"><span class="level-start"><span class="level-item">Python</span> </span><span class="level-end"><span class="level-item tag">9</span></span></a></li><li><a class="level is-marginless" href="/categories/Development/React/"><span class="level-start"><span class="level-item">React</span> </span><span class="level-end"><span class="level-item tag">2</span></span></a></li><li><a class="level is-marginless" href="/categories/Development/html5/"><span class="level-start"><span class="level-item">html5</span> </span><span class="level-end"><span class="level-item tag">1</span></span></a></li></ul></li><li><a class="level is-marginless" href="/categories/Operations/"><span class="level-start"><span class="level-item">Operations</span> </span><span class="level-end"><span class="level-item tag">18</span></span></a><ul><li><a class="level is-marginless" href="/categories/Operations/Nginx/"><span class="level-start"><span class="level-item">Nginx</span> </span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-marginless" href="/categories/Operations/OpenStack/"><span class="level-start"><span class="level-item">OpenStack</span> </span><span class="level-end"><span class="level-item tag">14</span></span></a></li><li><a class="level is-marginless" href="/categories/Operations/System/"><span class="level-start"><span class="level-item">System</span> </span><span class="level-end"><span class="level-item tag">3</span></span></a></li></ul></li><li><a class="level is-marginless" href="/categories/Reading-Writing/"><span class="level-start"><span class="level-item">Reading&Writing</span> </span><span class="level-end"><span class="level-item tag">3</span></span></a><ul><li><a class="level is-marginless" href="/categories/Reading-Writing/Hexo/"><span class="level-start"><span class="level-item">Hexo</span> </span><span class="level-end"><span class="level-item tag">2</span></span></a></li><li><a class="level is-marginless" href="/categories/Reading-Writing/LaTeX/"><span class="level-start"><span class="level-item">LaTeX</span> </span><span class="level-end"><span class="level-item tag">1</span></span></a></li></ul></li></ul></div></div></div><div class="card widget"><div class="card-content"><h3 class="menu-label">标签云</h3><a href="/tags/Agile/" style="font-size:10px">Agile</a> <a href="/tags/Angularjs/" style="font-size:11.11px">Angularjs</a> <a href="/tags/Animation/" style="font-size:10px">Animation</a> <a href="/tags/Application/" style="font-size:10px">Application</a> <a href="/tags/Artificial-Intelligence/" style="font-size:10px">Artificial Intelligence</a> <a href="/tags/BP/" style="font-size:10px">BP</a> <a href="/tags/Bokeh/" style="font-size:10px">Bokeh</a> <a href="/tags/Book/" style="font-size:10px">Book</a> <a href="/tags/C4-5/" style="font-size:10px">C4.5</a> <a href="/tags/CART/" style="font-size:10px">CART</a> <a href="/tags/CD/" style="font-size:10px">CD</a> <a href="/tags/CLI/" style="font-size:10px">CLI</a> <a href="/tags/CSS/" style="font-size:10px">CSS</a> <a href="/tags/CentOS/" style="font-size:11.11px">CentOS</a> <a href="/tags/Cinder/" style="font-size:10px">Cinder</a> <a href="/tags/Clipboardjs/" style="font-size:10px">Clipboardjs</a> <a href="/tags/Concept/" style="font-size:10px">Concept</a> <a href="/tags/Continuous-Delivery/" style="font-size:10px">Continuous Delivery</a> <a href="/tags/DeepLearning/" style="font-size:16.67px">DeepLearning</a> <a href="/tags/Department/" style="font-size:11.11px">Department</a> <a href="/tags/DevOps/" style="font-size:17.78px">DevOps</a> <a href="/tags/Develop/" style="font-size:13.33px">Develop</a> <a href="/tags/Development/" style="font-size:20px">Development</a> <a href="/tags/Directive/" style="font-size:10px">Directive</a> <a href="/tags/Distribution/" style="font-size:10px">Distribution</a> <a href="/tags/Django/" style="font-size:12.22px">Django</a> <a href="/tags/Document/" style="font-size:10px">Document</a> <a href="/tags/ES5/" style="font-size:10px">ES5</a> <a href="/tags/ES6/" style="font-size:10px">ES6</a> <a href="/tags/Echarts/" style="font-size:10px">Echarts</a> <a href="/tags/Engine/" style="font-size:10px">Engine</a> <a href="/tags/Entropy/" style="font-size:10px">Entropy</a> <a href="/tags/Filter/" style="font-size:10px">Filter</a> <a href="/tags/Front-End/" style="font-size:10px">Front End</a> <a href="/tags/Gallery/" style="font-size:10px">Gallery</a> <a href="/tags/Git/" style="font-size:10px">Git</a> <a href="/tags/Gradient-descent/" style="font-size:10px">Gradient descent</a> <a href="/tags/Hexo/" style="font-size:12.22px">Hexo</a> <a href="/tags/Horizon/" style="font-size:10px">Horizon</a> <a href="/tags/ID3-5/" style="font-size:10px">ID3.5</a> <a href="/tags/Icarus/" style="font-size:10px">Icarus</a> <a href="/tags/JavaScript/" style="font-size:18.89px">JavaScript</a> <a href="/tags/Javascript/" style="font-size:11.11px">Javascript</a> <a href="/tags/KVM/" style="font-size:10px">KVM</a> <a href="/tags/LaTeX/" style="font-size:10px">LaTeX</a> <a href="/tags/LibreOffice/" style="font-size:10px">LibreOffice</a> <a href="/tags/Linux/" style="font-size:10px">Linux</a> <a href="/tags/Machine-Learning/" style="font-size:11.11px">Machine Learning</a> <a href="/tags/Matrix/" style="font-size:10px">Matrix</a> <a href="/tags/MiddleWare/" style="font-size:10px">MiddleWare</a> <a href="/tags/Module/" style="font-size:10px">Module</a> <a href="/tags/Network/" style="font-size:10px">Network</a> <a href="/tags/Nginx/" style="font-size:10px">Nginx</a> <a href="/tags/NodeJS/" style="font-size:11.11px">NodeJS</a> <a href="/tags/OOP/" style="font-size:10px">OOP</a> <a href="/tags/OpenStack/" style="font-size:17.78px">OpenStack</a> <a href="/tags/OpenStackApi/" style="font-size:14.44px">OpenStackApi</a> <a href="/tags/Operations/" style="font-size:10px">Operations</a> <a href="/tags/Oprations/" style="font-size:11.11px">Oprations</a> <a href="/tags/PDF/" style="font-size:10px">PDF</a> <a href="/tags/Pipline/" style="font-size:10px">Pipline</a> <a href="/tags/Probability/" style="font-size:12.22px">Probability</a> <a href="/tags/Python/" style="font-size:15.56px">Python</a> <a href="/tags/React/" style="font-size:11.11px">React</a> <a href="/tags/Relational-algebra/" style="font-size:10px">Relational algebra</a> <a href="/tags/Restful/" style="font-size:10px">Restful</a> <a href="/tags/Route/" style="font-size:10px">Route</a> <a href="/tags/SVD/" style="font-size:10px">SVD</a> <a href="/tags/SVM/" style="font-size:11.11px">SVM</a> <a href="/tags/Scalar/" style="font-size:10px">Scalar</a> <a href="/tags/Sigmoid/" style="font-size:10px">Sigmoid</a> <a href="/tags/Team/" style="font-size:10px">Team</a> <a href="/tags/Tempest/" style="font-size:10px">Tempest</a> <a href="/tags/Tensor/" style="font-size:10px">Tensor</a> <a href="/tags/Testing/" style="font-size:10px">Testing</a> <a href="/tags/Time/" style="font-size:10px">Time</a> <a href="/tags/TimeMachine/" style="font-size:10px">TimeMachine</a> <a href="/tags/Tips/" style="font-size:10px">Tips</a> <a href="/tags/Vector/" style="font-size:10px">Vector</a> <a href="/tags/Vmware/" style="font-size:10px">Vmware</a> <a href="/tags/Vue/" style="font-size:17.78px">Vue</a> <a href="/tags/Vuex/" style="font-size:10px">Vuex</a> <a href="/tags/WSGI/" style="font-size:10px">WSGI</a> <a href="/tags/Web/" style="font-size:10px">Web</a> <a href="/tags/Word-Cut/" style="font-size:10px">Word Cut</a> <a href="/tags/aliyun/" style="font-size:10px">aliyun</a> <a href="/tags/auth/" style="font-size:10px">auth</a> <a href="/tags/babel/" style="font-size:10px">babel</a> <a href="/tags/certbot/" style="font-size:10px">certbot</a> <a href="/tags/decision-tree/" style="font-size:10px">decision tree</a> <a href="/tags/homebrew/" style="font-size:10px">homebrew</a> <a href="/tags/jwt/" style="font-size:10px">jwt</a> <a href="/tags/keystone/" style="font-size:11.11px">keystone</a> <a href="/tags/loader/" style="font-size:10px">loader</a> <a href="/tags/mathematics/" style="font-size:11.11px">mathematics</a> <a href="/tags/migrate/" style="font-size:10px">migrate</a> <a href="/tags/openstack/" style="font-size:10px">openstack</a> <a href="/tags/pdf2html/" style="font-size:10px">pdf2html</a> <a href="/tags/pm2/" style="font-size:10px">pm2</a> <a href="/tags/singular-value-decomposition/" style="font-size:10px">singular value decomposition</a> <a href="/tags/vue-router/" style="font-size:11.11px">vue-router</a> <a href="/tags/vue-ssr/" style="font-size:10px">vue-ssr</a> <a href="/tags/webpack/" style="font-size:10px">webpack</a> <a href="/tags/%E4%BD%8E%E9%80%9A%E6%BB%A4%E6%B3%A2%E5%99%A8/" style="font-size:10px">低通滤波器</a> <a href="/tags/%E5%85%A5%E9%97%A8/" style="font-size:10px">入门</a> <a href="/tags/%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F/" style="font-size:10px">全局变量</a> <a href="/tags/%E5%85%A8%E5%B1%80%E5%AF%B9%E8%B1%A1/" style="font-size:10px">全局对象</a> <a href="/tags/%E5%85%A8%E6%A0%88/" style="font-size:10px">全栈</a> <a href="/tags/%E5%85%AC%E5%BC%8F/" style="font-size:12.22px">公式</a> <a href="/tags/%E5%86%B3%E7%AD%96%E6%A0%91/" style="font-size:10px">决策树</a> <a href="/tags/%E5%87%BD%E6%95%B0/" style="font-size:10px">函数</a> <a href="/tags/%E5%88%86%E7%B1%BB%E5%99%A8/" style="font-size:10px">分类器</a> <a href="/tags/%E5%8A%A0%E9%80%9F/" style="font-size:10px">加速</a> <a href="/tags/%E5%8C%B9%E9%85%8D%E6%BB%A4%E6%B3%A2%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B/" style="font-size:10px">匹配滤波边缘检测</a> <a href="/tags/%E5%8D%B7%E7%A7%AF/" style="font-size:10px">卷积</a> <a href="/tags/%E5%8D%B7%E7%A7%AF%E6%A0%B8/" style="font-size:10px">卷积核</a> <a href="/tags/%E5%8E%9F%E5%9E%8B%E9%93%BE/" style="font-size:10px">原型链</a> <a href="/tags/%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD/" style="font-size:10px">反向传播</a> <a href="/tags/%E5%8F%98%E9%87%8F%E7%B1%BB%E5%9E%8B/" style="font-size:10px">变量类型</a> <a href="/tags/%E5%AE%98%E6%96%B9%E7%A4%BA%E4%BE%8B/" style="font-size:10px">官方示例</a> <a href="/tags/%E5%AF%B9%E5%81%B6%E5%BD%A2%E5%BC%8F/" style="font-size:10px">对偶形式</a> <a href="/tags/%E5%AF%B9%E8%B1%A1/" style="font-size:10px">对象</a> <a href="/tags/%E5%B9%B3%E7%A7%BB%E5%92%8C%E6%9F%A5%E5%88%86%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B/" style="font-size:10px">平移和查分边缘检测</a> <a href="/tags/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E4%B9%98%E5%AD%90%E6%B3%95/" style="font-size:10px">拉格朗日乘子法</a> <a href="/tags/%E6%8E%A8%E5%AF%BC/" style="font-size:12.22px">推导</a> <a href="/tags/%E6%8F%90%E4%BA%A4%E9%98%B6%E6%AE%B5/" style="font-size:10px">提交阶段</a> <a href="/tags/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1/" style="font-size:10px">最大似然估计</a> <a href="/tags/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E4%BC%B0%E8%AE%A1/" style="font-size:10px">最小二乘估计</a> <a href="/tags/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95/" style="font-size:10px">最小二乘法</a> <a href="/tags/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF/" style="font-size:10px">朴素贝叶斯</a> <a href="/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/" style="font-size:10px">机器学习</a> <a href="/tags/%E6%9D%A1%E4%BB%B6%E6%A6%82%E7%8E%87/" style="font-size:10px">条件概率</a> <a href="/tags/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D/" style="font-size:11.11px">梯度下降</a> <a href="/tags/%E6%A2%AF%E5%BA%A6%E6%96%B9%E5%90%91%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B/" style="font-size:10px">梯度方向边缘检测</a> <a href="/tags/%E6%A6%82%E5%BF%B5/" style="font-size:10px">概念</a> <a href="/tags/%E6%A6%82%E7%8E%87/" style="font-size:10px">概率</a> <a href="/tags/%E6%B1%82%E5%AF%BC/" style="font-size:10px">求导</a> <a href="/tags/%E6%B5%81%E7%A8%8B/" style="font-size:10px">流程</a> <a href="/tags/%E7%86%B5/" style="font-size:10px">熵</a> <a href="/tags/%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/" style="font-size:10px">生命周期</a> <a href="/tags/%E7%9F%A9%E9%98%B5/" style="font-size:10px">矩阵</a> <a href="/tags/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/" style="font-size:10px">神经网络</a> <a href="/tags/%E7%A7%81%E6%9C%89%E5%AF%B9%E8%B1%A1/" style="font-size:10px">私有对象</a> <a href="/tags/%E7%B1%BB/" style="font-size:10px">类</a> <a href="/tags/%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92/" style="font-size:10px">线性回归</a> <a href="/tags/%E8%81%94%E5%90%88%E6%A6%82%E7%8E%87/" style="font-size:10px">联合概率</a> <a href="/tags/%E8%B4%9D%E5%8F%B6%E6%96%AF%E5%88%A4%E5%AE%9A%E5%87%86%E5%88%99/" style="font-size:10px">贝叶斯判定准则</a> <a href="/tags/%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B/" style="font-size:10px">边缘检测</a> <a href="/tags/%E8%BE%B9%E9%99%85%E6%A6%82%E7%8E%87/" style="font-size:10px">边际概率</a> <a href="/tags/%E9%97%AD%E5%8C%85/" style="font-size:10px">闭包</a> <a href="/tags/%E9%97%B4%E9%9A%94/" style="font-size:11.11px">间隔</a> <a href="/tags/%E9%AB%98%E6%96%AF%E5%88%86%E5%B8%83/" style="font-size:10px">高斯分布</a> <a href="/tags/%E9%AB%98%E9%80%9A%E6%BB%A4%E6%B3%A2%E5%99%A8/" style="font-size:10px">高通滤波器</a></div></div><div class="column-right-shadow"><div class="card widget"><div class="card-content"><h3 class="menu-label">最新文章</h3><article class="media"><a href="/2019-11-24/4adcf99c.html" class="media-left"><p class="image is-64x64"><img class="thumbnail" src="https://imgs.borgor.cn/imgs/20191124220507.png" alt="JavaScript闭包到底解决了什么问题？"></p></a><div class="media-content"><div class="content"><div><time class="has-text-grey is-size-7 is-uppercase" datetime="2019-11-24T12:42:13.000Z">2019-11-24</time></div><a href="/2019-11-24/4adcf99c.html" class="has-link-black-ter is-size-6">JavaScript闭包到底解决了什么问题？</a><p class="is-size-7 is-uppercase"><a class="has-link-grey -link" href="/categories/Development/">Development</a> / <a class="has-link-grey -link" href="/categories/Development/JavaScript/">JavaScript</a></p></div></div></article><article class="media"><a href="/2019-11-22/f971e187.html" class="media-left"><p class="image is-64x64"><img class="thumbnail" src="https://imgs.borgor.cn/imgs/20191122161153.png" alt="JavaScript中对象的生命周期"></p></a><div class="media-content"><div class="content"><div><time class="has-text-grey is-size-7 is-uppercase" datetime="2019-11-22T06:04:32.000Z">2019-11-22</time></div><a href="/2019-11-22/f971e187.html" class="has-link-black-ter is-size-6">JavaScript中对象的生命周期</a><p class="is-size-7 is-uppercase"><a class="has-link-grey -link" href="/categories/Development/">Development</a> / <a class="has-link-grey -link" href="/categories/Development/JavaScript/">JavaScript</a></p></div></div></article><article class="media"><a href="/2019-11-21/c07cc943.html" class="media-left"><p class="image is-64x64"><img class="thumbnail" src="https://imgs.borgor.cn/imgs/20191121175758.png" alt="React官方示例中的小游戏示例"></p></a><div class="media-content"><div class="content"><div><time class="has-text-grey is-size-7 is-uppercase" datetime="2019-11-21T09:56:03.000Z">2019-11-21</time></div><a href="/2019-11-21/c07cc943.html" class="has-link-black-ter is-size-6">React官方示例中的小游戏示例</a><p class="is-size-7 is-uppercase"><a class="has-link-grey -link" href="/categories/Development/">Development</a> / <a class="has-link-grey -link" href="/categories/Development/React/">React</a></p></div></div></article><article class="media"><a href="/2019-11-21/769edcc6.html" class="media-left"><p class="image is-64x64"><img class="thumbnail" src="https://imgs.borgor.cn/imgs/20191121141128.png" alt="JavaScript引擎的工作原理探析"></p></a><div class="media-content"><div class="content"><div><time class="has-text-grey is-size-7 is-uppercase" datetime="2019-11-21T00:30:12.000Z">2019-11-21</time></div><a href="/2019-11-21/769edcc6.html" class="has-link-black-ter is-size-6">JavaScript引擎的工作原理探析</a><p class="is-size-7 is-uppercase"><a class="has-link-grey -link" href="/categories/Development/">Development</a> / <a class="has-link-grey -link" href="/categories/Development/JavaScript/">JavaScript</a></p></div></div></article><article class="media"><a href="/2019-11-19/290f6390.html" class="media-left"><p class="image is-64x64"><img class="thumbnail" src="https://imgs.borgor.cn/imgs/20191119100237.png" alt="深入了解JavaScript中的基本变量类型"></p></a><div class="media-content"><div class="content"><div><time class="has-text-grey is-size-7 is-uppercase" datetime="2019-11-19T04:22:33.000Z">2019-11-19</time></div><a href="/2019-11-19/290f6390.html" class="has-link-black-ter is-size-6">深入了解JavaScript中的基本变量类型</a><p class="is-size-7 is-uppercase"><a class="has-link-grey -link" href="/categories/Development/">Development</a> / <a class="has-link-grey -link" href="/categories/Development/JavaScript/">JavaScript</a></p></div></div></article></div></div><div class="card widget"><div class="card-content"><div class="menu"><h3 class="menu-label">归档</h3><ul class="menu-list"><li><a class="level is-marginless" href="/archives/2019/11/"><span class="level-start"><span class="level-item">十一月 2019</span> </span><span class="level-end"><span class="level-item tag">7</span></span></a></li><li><a class="level is-marginless" href="/archives/2019/10/"><span class="level-start"><span class="level-item">十月 2019</span> </span><span class="level-end"><span class="level-item tag">8</span></span></a></li><li><a class="level is-marginless" href="/archives/2019/09/"><span class="level-start"><span class="level-item">九月 2019</span> </span><span class="level-end"><span class="level-item tag">5</span></span></a></li><li><a class="level is-marginless" href="/archives/2019/08/"><span class="level-start"><span class="level-item">八月 2019</span> </span><span class="level-end"><span class="level-item tag">13</span></span></a></li><li><a class="level is-marginless" href="/archives/2019/07/"><span class="level-start"><span class="level-item">七月 2019</span> </span><span class="level-end"><span class="level-item tag">15</span></span></a></li><li><a class="level is-marginless" href="/archives/2019/06/"><span class="level-start"><span class="level-item">六月 2019</span> </span><span class="level-end"><span class="level-item tag">11</span></span></a></li><li><a class="level is-marginless" href="/archives/2018/07/"><span class="level-start"><span class="level-item">七月 2018</span> </span><span class="level-end"><span class="level-item tag">4</span></span></a></li><li><a class="level is-marginless" href="/archives/2018/06/"><span class="level-start"><span class="level-item">六月 2018</span> </span><span class="level-end"><span class="level-item tag">3</span></span></a></li><li><a class="level is-marginless" href="/archives/2017/12/"><span class="level-start"><span class="level-item">十二月 2017</span> </span><span class="level-end"><span class="level-item tag">2</span></span></a></li><li><a class="level is-marginless" href="/archives/2017/11/"><span class="level-start"><span class="level-item">十一月 2017</span> </span><span class="level-end"><span class="level-item tag">3</span></span></a></li><li><a class="level is-marginless" href="/archives/2017/10/"><span class="level-start"><span class="level-item">十月 2017</span> </span><span class="level-end"><span class="level-item tag">5</span></span></a></li><li><a class="level is-marginless" href="/archives/2017/09/"><span class="level-start"><span class="level-item">九月 2017</span> </span><span class="level-end"><span class="level-item tag">10</span></span></a></li></ul></div></div></div><div class="card widget"><div class="card-content"><div class="menu"><h3 class="menu-label">标签</h3><div class="field is-grouped is-grouped-multiline"><div class="control"><a class="tags has-addons" href="/tags/Agile/"><span class="tag">Agile</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Angularjs/"><span class="tag">Angularjs</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Animation/"><span class="tag">Animation</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Application/"><span class="tag">Application</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Artificial-Intelligence/"><span class="tag">Artificial Intelligence</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/BP/"><span class="tag">BP</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Bokeh/"><span class="tag">Bokeh</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Book/"><span class="tag">Book</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/C4-5/"><span class="tag">C4.5</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/CART/"><span class="tag">CART</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/CD/"><span class="tag">CD</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/CLI/"><span class="tag">CLI</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/CSS/"><span class="tag">CSS</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/CentOS/"><span class="tag">CentOS</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Cinder/"><span class="tag">Cinder</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Clipboardjs/"><span class="tag">Clipboardjs</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Concept/"><span class="tag">Concept</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Continuous-Delivery/"><span class="tag">Continuous Delivery</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/DeepLearning/"><span class="tag">DeepLearning</span> <span class="tag is-grey">7</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Department/"><span class="tag">Department</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/DevOps/"><span class="tag">DevOps</span> <span class="tag is-grey">8</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Develop/"><span class="tag">Develop</span> <span class="tag is-grey">4</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Development/"><span class="tag">Development</span> <span class="tag is-grey">16</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Directive/"><span class="tag">Directive</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Distribution/"><span class="tag">Distribution</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Django/"><span class="tag">Django</span> <span class="tag is-grey">3</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Document/"><span class="tag">Document</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/ES5/"><span class="tag">ES5</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/ES6/"><span class="tag">ES6</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Echarts/"><span class="tag">Echarts</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Engine/"><span class="tag">Engine</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Entropy/"><span class="tag">Entropy</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Filter/"><span class="tag">Filter</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Front-End/"><span class="tag">Front End</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Gallery/"><span class="tag">Gallery</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Git/"><span class="tag">Git</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Gradient-descent/"><span class="tag">Gradient descent</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Hexo/"><span class="tag">Hexo</span> <span class="tag is-grey">3</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Horizon/"><span class="tag">Horizon</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/ID3-5/"><span class="tag">ID3.5</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Icarus/"><span class="tag">Icarus</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/JavaScript/"><span class="tag">JavaScript</span> <span class="tag is-grey">9</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Javascript/"><span class="tag">Javascript</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/KVM/"><span class="tag">KVM</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/LaTeX/"><span class="tag">LaTeX</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/LibreOffice/"><span class="tag">LibreOffice</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Linux/"><span class="tag">Linux</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Machine-Learning/"><span class="tag">Machine Learning</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Matrix/"><span class="tag">Matrix</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/MiddleWare/"><span class="tag">MiddleWare</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Module/"><span class="tag">Module</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Network/"><span class="tag">Network</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Nginx/"><span class="tag">Nginx</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/NodeJS/"><span class="tag">NodeJS</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/OOP/"><span class="tag">OOP</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/OpenStack/"><span class="tag">OpenStack</span> <span class="tag is-grey">8</span></a></div><div class="control"><a class="tags has-addons" href="/tags/OpenStackApi/"><span class="tag">OpenStackApi</span> <span class="tag is-grey">5</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Operations/"><span class="tag">Operations</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Oprations/"><span class="tag">Oprations</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/PDF/"><span class="tag">PDF</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Pipline/"><span class="tag">Pipline</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Probability/"><span class="tag">Probability</span> <span class="tag is-grey">3</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Python/"><span class="tag">Python</span> <span class="tag is-grey">6</span></a></div><div class="control"><a class="tags has-addons" href="/tags/React/"><span class="tag">React</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Relational-algebra/"><span class="tag">Relational algebra</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Restful/"><span class="tag">Restful</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Route/"><span class="tag">Route</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/SVD/"><span class="tag">SVD</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/SVM/"><span class="tag">SVM</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Scalar/"><span class="tag">Scalar</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Sigmoid/"><span class="tag">Sigmoid</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Team/"><span class="tag">Team</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Tempest/"><span class="tag">Tempest</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Tensor/"><span class="tag">Tensor</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Testing/"><span class="tag">Testing</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Time/"><span class="tag">Time</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/TimeMachine/"><span class="tag">TimeMachine</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Tips/"><span class="tag">Tips</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Vector/"><span class="tag">Vector</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Vmware/"><span class="tag">Vmware</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Vue/"><span class="tag">Vue</span> <span class="tag is-grey">8</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Vuex/"><span class="tag">Vuex</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/WSGI/"><span class="tag">WSGI</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Web/"><span class="tag">Web</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Word-Cut/"><span class="tag">Word Cut</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/aliyun/"><span class="tag">aliyun</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/auth/"><span class="tag">auth</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/babel/"><span class="tag">babel</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/certbot/"><span class="tag">certbot</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/decision-tree/"><span class="tag">decision tree</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/homebrew/"><span class="tag">homebrew</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/jwt/"><span class="tag">jwt</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/keystone/"><span class="tag">keystone</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/loader/"><span class="tag">loader</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/mathematics/"><span class="tag">mathematics</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/migrate/"><span class="tag">migrate</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/openstack/"><span class="tag">openstack</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/pdf2html/"><span class="tag">pdf2html</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/pm2/"><span class="tag">pm2</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/singular-value-decomposition/"><span class="tag">singular value decomposition</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/vue-router/"><span class="tag">vue-router</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/vue-ssr/"><span class="tag">vue-ssr</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/webpack/"><span class="tag">webpack</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E4%BD%8E%E9%80%9A%E6%BB%A4%E6%B3%A2%E5%99%A8/"><span class="tag">低通滤波器</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%85%A5%E9%97%A8/"><span class="tag">入门</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F/"><span class="tag">全局变量</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%85%A8%E5%B1%80%E5%AF%B9%E8%B1%A1/"><span class="tag">全局对象</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%85%A8%E6%A0%88/"><span class="tag">全栈</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%85%AC%E5%BC%8F/"><span class="tag">公式</span> <span class="tag is-grey">3</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%86%B3%E7%AD%96%E6%A0%91/"><span class="tag">决策树</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%87%BD%E6%95%B0/"><span class="tag">函数</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%88%86%E7%B1%BB%E5%99%A8/"><span class="tag">分类器</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%8A%A0%E9%80%9F/"><span class="tag">加速</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%8C%B9%E9%85%8D%E6%BB%A4%E6%B3%A2%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B/"><span class="tag">匹配滤波边缘检测</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%8D%B7%E7%A7%AF/"><span class="tag">卷积</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%8D%B7%E7%A7%AF%E6%A0%B8/"><span class="tag">卷积核</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%8E%9F%E5%9E%8B%E9%93%BE/"><span class="tag">原型链</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD/"><span class="tag">反向传播</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%8F%98%E9%87%8F%E7%B1%BB%E5%9E%8B/"><span class="tag">变量类型</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%AE%98%E6%96%B9%E7%A4%BA%E4%BE%8B/"><span class="tag">官方示例</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%AF%B9%E5%81%B6%E5%BD%A2%E5%BC%8F/"><span class="tag">对偶形式</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%AF%B9%E8%B1%A1/"><span class="tag">对象</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E5%B9%B3%E7%A7%BB%E5%92%8C%E6%9F%A5%E5%88%86%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B/"><span class="tag">平移和查分边缘检测</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E4%B9%98%E5%AD%90%E6%B3%95/"><span class="tag">拉格朗日乘子法</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%8E%A8%E5%AF%BC/"><span class="tag">推导</span> <span class="tag is-grey">3</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%8F%90%E4%BA%A4%E9%98%B6%E6%AE%B5/"><span class="tag">提交阶段</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1/"><span class="tag">最大似然估计</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E4%BC%B0%E8%AE%A1/"><span class="tag">最小二乘估计</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95/"><span class="tag">最小二乘法</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF/"><span class="tag">朴素贝叶斯</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/"><span class="tag">机器学习</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%9D%A1%E4%BB%B6%E6%A6%82%E7%8E%87/"><span class="tag">条件概率</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D/"><span class="tag">梯度下降</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%A2%AF%E5%BA%A6%E6%96%B9%E5%90%91%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B/"><span class="tag">梯度方向边缘检测</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%A6%82%E5%BF%B5/"><span class="tag">概念</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%A6%82%E7%8E%87/"><span class="tag">概率</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%B1%82%E5%AF%BC/"><span class="tag">求导</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E6%B5%81%E7%A8%8B/"><span class="tag">流程</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E7%86%B5/"><span class="tag">熵</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/"><span class="tag">生命周期</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E7%9F%A9%E9%98%B5/"><span class="tag">矩阵</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/"><span class="tag">神经网络</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E7%A7%81%E6%9C%89%E5%AF%B9%E8%B1%A1/"><span class="tag">私有对象</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E7%B1%BB/"><span class="tag">类</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92/"><span class="tag">线性回归</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E8%81%94%E5%90%88%E6%A6%82%E7%8E%87/"><span class="tag">联合概率</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E8%B4%9D%E5%8F%B6%E6%96%AF%E5%88%A4%E5%AE%9A%E5%87%86%E5%88%99/"><span class="tag">贝叶斯判定准则</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B/"><span class="tag">边缘检测</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E8%BE%B9%E9%99%85%E6%A6%82%E7%8E%87/"><span class="tag">边际概率</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E9%97%AD%E5%8C%85/"><span class="tag">闭包</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E9%97%B4%E9%9A%94/"><span class="tag">间隔</span> <span class="tag is-grey">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E9%AB%98%E6%96%AF%E5%88%86%E5%B8%83/"><span class="tag">高斯分布</span> <span class="tag is-grey">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/%E9%AB%98%E9%80%9A%E6%BB%A4%E6%B3%A2%E5%99%A8/"><span class="tag">高通滤波器</span> <span class="tag is-grey">1</span></a></div></div></div></div></div></div></div></div></div></section><footer class="footer"><div class="container"><div class="level"><div class="level-start has-text-centered-mobile"><a class="footer-logo is-block has-mb-6" href="/"><img src="https://imgs.borgor.cn/imgs20190625111723.jpg" alt="迁移 VMware 虚拟机到 KVM" height="28"></a><p class="is-size-7">&copy; 2017-2019 Cyrusky&nbsp; Powered by <a href="https://hexo.io/" target="_blank">Hexo</a> & <a href="https://github.com/ppoffice/hexo-theme-icarus" target="_blank">Icarus</a><br><span id="busuanzi_container_site_uv">共<span id="busuanzi_value_site_uv">0</span>个访客</span><br><a target="_blank" href="https://icp.chinaz.com/info?q=borgor.cn">陇ICP备19002255号</a></p></div><div class="level-end"><div class="field has-addons is-flex-center-mobile has-mt-5-mobile is-flex-wrap is-flex-middle"><p class="control"><a class="button is-white is-large" target="_blank" title="Creative Commons" href="https://creativecommons.org/"><i class="fab fa-creative-commons"></i></a></p><p class="control"><a class="button is-white is-large" target="_blank" title="Attribution 4.0 International" href="https://creativecommons.org/licenses/by/4.0/"><i class="fab fa-creative-commons-by"></i></a></p><p class="control"><a class="button is-white is-large" target="_blank" title="Download on GitHub" href="https://github.com/ppoffice/hexo-theme-icarus"><i class="fab fa-github"></i></a></p></div></div></div></div></footer><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment-with-locales.min.js"></script><script>moment.locale("zh-CN")</script><script src="/js/animation.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/lightgallery/1.6.8/js/lightgallery.min.js" defer></script><script src="https://cdnjs.cloudflare.com/ajax/libs/justifiedGallery/3.7.0/js/jquery.justifiedGallery.min.js" defer></script><script src="/js/gallery.js" defer></script><div id="outdated"><h6>Your browser is out-of-date!</h6><p>Update your browser to view this website correctly. <a id="btnUpdateBrowser" href="http://outdatedbrowser.com/" target="_blank" rel="noopener">Update my browser now</a></p><p class="last"><a href="#" id="btnCloseUpdateBrowser" title="Close">&times;</a></p></div><script src="https://cdnjs.cloudflare.com/ajax/libs/outdated-browser/1.1.5/outdatedbrowser.min.js" defer></script><script>document.addEventListener("DOMContentLoaded",function(){outdatedBrowser({bgColor:"#f25648",color:"#ffffff",lowerThan:"flex"})})</script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML" defer></script><script>document.addEventListener("DOMContentLoaded",function(){MathJax.Hub.Config({"HTML-CSS":{matchFontHeight:!1},SVG:{matchFontHeight:!1},CommonHTML:{matchFontHeight:!1},tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]]}})})</script><a id="back-to-top" title="回到顶端" href="javascript:;" target="_blank" rel="noopener"><i class="fas fa-chevron-up"></i></a><script src="/js/back-to-top.js" defer></script><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js" defer></script><script src="/js/clipboard.js" defer></script><script src="/js/main.js" defer></script><div class="searchbox ins-search"><div class="searchbox-container ins-search-container"><div class="searchbox-input-wrapper"><input type="text" class="searchbox-input ins-search-input" placeholder="想要查找什么..."> <span class="searchbox-close ins-close ins-selectable"><i class="fa fa-times-circle"></i></span></div><div class="searchbox-result-wrapper ins-section-wrapper"><div class="ins-section-container"></div></div></div></div><script>!function(T){var N={TRANSLATION:{POSTS:"文章",PAGES:"页面",CATEGORIES:"分类",TAGS:"标签",UNTITLED:"(无标题)"},CONTENT_URL:"/content.json"};T.INSIGHT_CONFIG=N}(window)</script><script src="/js/insight.js" defer></script><link rel="stylesheet" href="/css/search.css"><link rel="stylesheet" href="/css/insight.css"></body></html><!-- rebuild by neat -->